home *** CD-ROM | disk | FTP | other *** search
- /*
- Preferences Library
-
- Usage:
- var value = window['piro.sakura.ne.jp'].prefs.getPref('my.extension.pref');
- window['piro.sakura.ne.jp'].prefs.setPref('my.extension.pref', true);
- window['piro.sakura.ne.jp'].prefs.clearPref('my.extension.pref');
- var listener = {
- domains : [
- 'browser.tabs',
- 'extensions.someextension'
- ],
- observe : function(aSubject, aTopic, aData)
- {
- if (aTopic != 'nsPref:changed') return;
- var value = window['piro.sakura.ne.jp'].prefs.getPref(aData);
- }
- };
- window['piro.sakura.ne.jp'].prefs.addPrefListener(listener);
- window['piro.sakura.ne.jp'].prefs.removePrefListener(listener);
-
- lisence: The MIT License, Copyright (c) 2009-2010 SHIMODA "Piro" Hiroshi
- http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/license.txt
- original:
- http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/prefs.js
- http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/prefs.test.js
- */
- (function() {
- const currentRevision = 4;
-
- if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
-
- var loadedRevision = 'prefs' in window['piro.sakura.ne.jp'] ?
- window['piro.sakura.ne.jp'].prefs.revision :
- 0 ;
- if (loadedRevision && loadedRevision > currentRevision) {
- return;
- }
-
- const Cc = Components.classes;
- const Ci = Components.interfaces;
-
- window['piro.sakura.ne.jp'].prefs = {
- revision : currentRevision,
-
- Prefs : Cc['@mozilla.org/preferences;1']
- .getService(Ci.nsIPrefBranch)
- .QueryInterface(Ci.nsIPrefBranch2),
-
- DefaultPrefs : Cc['@mozilla.org/preferences-service;1']
- .getService(Ci.nsIPrefService)
- .getDefaultBranch(null),
-
- getPref : function(aPrefstring, aBranch)
- {
- if (!aBranch) aBranch = this.Prefs;
- switch (aBranch.getPrefType(aPrefstring))
- {
- case aBranch.PREF_STRING:
- return decodeURIComponent(escape(aBranch.getCharPref(aPrefstring)));
-
- case aBranch.PREF_INT:
- return aBranch.getIntPref(aPrefstring);
-
- case aBranch.PREF_BOOL:
- return aBranch.getBoolPref(aPrefstring);
-
- case aBranch.PREF_INVALID:
- default:
- return null;
- }
- },
-
- getDefaultPref : function(aPrefstring)
- {
- return this.getPref(aPrefstring, this.DefaultPrefs);
- },
-
- setPref : function(aPrefstring, aNewValue, aBranch)
- {
- if (!aBranch) aBranch = this.Prefs;
- switch (typeof aNewValue)
- {
- case 'string':
- return aBranch.setCharPref(aPrefstring, unescape(encodeURIComponent(aNewValue)));
-
- case 'number':
- return aBranch.setIntPref(aPrefstring, parseInt(aNewValue));
-
- default:
- return aBranch.setBoolPref(aPrefstring, aNewValue);
- }
- },
-
- setDefaultPref : function(aPrefstring, aNewValue)
- {
- return this.setPref(aPrefstring, aNewValue, this.DefaultPrefs);
- },
-
- clearPref : function(aPrefstring)
- {
- if (this.Prefs.prefHasUserValue(aPrefstring))
- this.Prefs.clearUserPref(aPrefstring);
- },
-
- addPrefListener : function(aObserver)
- {
- var domains = ('domains' in aObserver) ? aObserver.domains : [aObserver.domain] ;
- try {
- for each (var domain in domains)
- this.Prefs.addObserver(domain, aObserver, false);
- }
- catch(e) {
- }
- },
-
- removePrefListener : function(aObserver)
- {
- var domains = ('domains' in aObserver) ? aObserver.domains : [aObserver.domain] ;
- try {
- for each (var domain in domains)
- this.Prefs.removeObserver(domain, aObserver, false);
- }
- catch(e) {
- }
- }
- };
- })();
-